/* eslint-disable eqeqeq */
/* eslint-disable no-undef */
import config from '@/config/config'
import base from './base'
import store from '@/store'

const ua = window.navigator.userAgent.toLowerCase()
let isWeiXin = false // 是否是微信浏览器

if (ua.match(/MicroMessenger/i) == 'micromessenger') {
  isWeiXin = true
}
console.log('是否是微信浏览器：', isWeiXin)

export default {
  methods: {
    // 注入权限验证配置
    $wxConfig (config) {
      console.log(config)
      if (!isWeiXin) {
        return
      }
      wx.config(config)
    },
    // 是否是微信浏览器
    $isWxBrowser () {
      return isWeiXin
    },
    // 接口处理验证结果
    $wxReady () {
      return new Promise((resolve, reject) => {
        if (!isWeiXin) {
          // 非微信浏览器
          // eslint-disable-next-line prefer-promise-reject-errors
          reject()
        }
        wx.ready(() => {
          // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
          resolve()
        })
        wx.error((res) => {
          // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
          reject(res)
        })
      })
    },
    // 用户同意授权，获取code
    $wxGetCode (path = '/index') {
      if (!isWeiXin) {
        // 非微信浏览器
        window.location.href = window.location.origin + `/#${path}`
        return
      }
      const wxurl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${store.getters.wx.appId}&redirect_uri=${encodeURIComponent(config.www + `/#${path}`)}&response_type=code&scope=${'snsapi_base'}&state=STATE#wechat_redirect`
      window.location.href = wxurl
    },
    // 通过code换取网页授权access_token
    $wxGetAccessToken (code) {
      return new Promise(resolve => {
        base.methods.$api('GET', `/api/v1/wechat/mp_access_token/${code}`).then(res => {
          resolve(res)
        })
      })
    },
    // 发起一个微信支付请求
    $wxChooseWXPay (Pay) {
      return new Promise(resolve => {
        WeixinJSBridge.invoke('getBrandWCPayRequest', Pay, function (res) {
          resolve(res)
        })
      })
    },
    // 获取地理位置接口
    $wxGetLocation () {
      return new Promise(resolve => {
        wx.getLocation({
          type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
          success: (res) => {
            resolve(res)
          }
        })
      })
    },
    // 打开微信内置地图
    $wxOpenLocation (obj) {
      return new Promise(resolve => {
        wx.openLocation({
          latitude: obj.lat,
          longitude: obj.lng,
          scale: 15,
          name: obj.name,
          address: obj.address,
          success: (res) => {
            resolve(res)
          }
        })
      })
    },
    // 设置微信分享的配置内容
    $setWxShareConfig (obj) {
      if (!isWeiXin) {
        return
      }
      // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
      wx.onMenuShareAppMessage({
        title: `【展晔】${obj.title}`, // 分享标题
        desc: obj.desc, // 分享描述
        link: obj.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: obj.img, // 分享图标
        success: () => {
          // 设置成功
          console.log('分享设置成功')
        }
      })
      // 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容
      wx.onMenuShareTimeline({
        title: `【展晔】${obj.title ? obj.title : ''}`, // 分享标题
        desc: obj.desc, // 分享描述
        link: obj.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: obj.img, // 分享图标
        success: () => {
          // 设置成功
          console.log('分享设置成功')
        }
      })
    },
    $wxScan () {
      return new Promise(resolve => {
        wx.scanQRCode({
          needResult: 0, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
          scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码，默认二者都有
          success: function (res) {
            resolve(res.resultStr) // 当needResult 为 1 时，扫码返回的结果
          }
        })
      })
    }
  }
}
